6042
18129
Ho un set di dati come indicato di seguito
nome col1 col2
a 10.3 10.9
b 11 15
c 20 7.2
d 6.2 6.2
e 5.3 5.4
f 4.5 4.0
voglio confrontare col1 e col2 del mio df e voglio creare un'altra colonna in cui durante il confronto dei valori col1 e col2 se il valore di col2 è in aumento da col1, voglio entrare in aumento accanto a loro nella mia colonna lì e se lo sono decrescente allora voglio scrivere decrescente e nessuna modifica se sono uguali
e voglio il mio output in questo modo
nome col1 col2 col3
a 10,3 10,9 in aumento
b 11 15 crescente
c 20 7.2 in diminuzione
d 6.2 6.2 nessuna modifica
e 5.3 5.4 in aumento
f 4,5 4,0 in diminuzione 
Con dplyr:
df%>%
mutate (Col3 = ifelse (col2 == col1,
"nessun cambiamento",
ifelse (col2> col1,
"crescente", "decrescente")))
O usando case_when come suggerito da @akrun:
df%>%
mutate (Col3 = case_when (col1 == col2 ~ "no change",
col2> col1 ~ "Crescente",
VERO ~ "in diminuzione"))
Risultato:
nome col1 col2 Col3
1 a 10,3 10,9 crescente
2 b 11,0 15,0 crescente
3 c 20,0 7,2 in diminuzione
4 d 6.2 6.2 nessuna modifica
5 e 5.3 5.4 in aumento
6 f 4,5 4,0 in diminuzione
Dati:
df <-structure (list (name = c ("a", "b", "c", "d", "e", "f"), col1 = c (10.3,
11, 20, 6.2, 5.3, 4.5), col2 = c (10.9, 15, 7.2, 6.2, 5.4, 4)), class = "data.frame", row.names = c (NA,
-6L))
|
Possiamo sottrarre col1 da col2 e quindi usare il segno per assegnare i valori
df $ col3 <- c ("decrescente", "nessuna modifica", "crescente") [segno (df $ col1 - df $ col2) + 2]
df
# nome col1 col2 col3
# 1 a 10,3 10,9 in diminuzione
# 2 b 11,0 15,0 in diminuzione
# 3 c 20.0 7.2 in aumento
# 4 d 6.2 6.2 nessun cambiamento
# 5 e 5.3 5.4 in diminuzione
# 6 f 4.5 4.0 crescente
Oppure usando dplyr possiamo usare case_when
libreria (dplyr)
df%>%
mutate (col3 = case_when (col1 == col2 ~ "no change",
col1> col2 ~ "crescente",
VERO ~ "in diminuzione"))
|
Base R
df $ col3 <-with (df, ifelse (col1> col2, "decrescente",
ifelse (col1